package xyz.sicau.blog.utils;


import org.springframework.stereotype.Component;
import xyz.sicau.blog.bean.Blog;
import xyz.sicau.blog.dao.BlogMapper;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


/**
 * 能 static 的方法就尽量static
 * 如果要查表才注入
 */
@Component
public class DiyMethod {
    private static final String password = "wdnmd"; // 密钥
    @Resource
    BlogMapper blogMapper;

    // 加密
    public static String encrypt(String sourceString) {
        char[] p = password.toCharArray();
        int n = p.length;
        char[] c = sourceString.toCharArray();
        int m = c.length;
        for(int k = 0; k < m; k++) {
            int mima = c[k] + p[k % n]; //加密
            c[k] = (char)mima;
        }
        return new String(c);
    }
    // 解密
    public static String decrypt(String sourceString) {
        char[] p = password.toCharArray();
        int n = p.length;
        char[] c = sourceString.toCharArray();
        int m = c.length;
        for(int k = 0; k < m; k++) {
            int yuan = c[k] - p[k % n];
            c[k] = (char)yuan;
        }
        return new String(c);
    }

    /**
     * 检查blog对象是否可以加入数据库
     * 写得垃圾，有时间改进一下
     */
    public boolean checkBlog(Blog blog) {
        // 先检查数据是否齐全
        if (blog.getBlogContent().isEmpty()) {
            System.out.println("服务器：内容为空，博客发送失败");
            return false;
        }

        if (blog.getBlogTime() == null) {
            if (blog.getBlogType().equals("pc")) {
                System.out.println("服务器：时间格式不正确，直接跳过");
                return false;
            }
        }

        System.out.println("数据齐全");

        // 以下是在数据库中检查
        if (blog.getBlogType().equals("pc")) {
            List<Blog> blogs = blogMapper.getBlogsByUsername(blog.getBlogUsername());
            // 找到此用户前后一分钟发的blog
            for (Blog iblog : blogs) {
                long time = blog.getBlogTime().getTime();
                if (iblog.getBlogTime().getTime() > time - 60000 && iblog.getBlogTime().getTime() < time + 60000 ) {
                    System.out.println("checkBlog：blog已存在，博客发送失败");
                    return false;
                }
            }
        }

        return true;
    }


    /**
     * 前端传回的标准字符串时间格式，转为Date对象
     * 这里有必要规定一下前端发送过来的日期时间格式
     * 因为前端发来的日期时间格式千奇百怪，不好去一一解析
     * 所以日期格式的转换应该留给前端做，特殊格式特殊处理，统一转换为2021-10-31 12:57
     * 后端只处理格式为
     */
    public static Date stringToDate(String dateString) {
        // 特殊处理QQ空间爬虫的日期格式，因为我python日期库真的不想学了
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 H:mm");
        try {
            Date parse = simpleDateFormat.parse(dateString);
           // System.out.println("爬虫数据");
            return parse;
        } catch (Exception ignored) {
           // System.out.println("不是爬虫数据，换yyyy-M-d H:mm");
        }

        // 如果不是QQ爬虫的日期格式，那么就用规定的日期格式
        simpleDateFormat = new SimpleDateFormat("yyyy-M-d H:mm");
        try {
            return simpleDateFormat.parse(dateString);
        } catch (Exception ignored) {
           // System.out.println("时间格式不正确，换成yyyy-M-d");
        }

        // 注册时会传会没有时间的日期
        simpleDateFormat = new SimpleDateFormat("yyyy-M-d");
        try {
            return simpleDateFormat.parse(dateString);
        } catch (Exception ignored) {
           // System.out.println("都不对，返回null");
        }

        return null;
    }


}
